①注意:

程序中使用了sleep()函数、system()函数

  • 关于 sleep() 函数
    sleep() 函数的头文件和用法会因环境的不同而有所不同。
    具体见-sleep()函数功能及用法

  • 关于system() 清屏函数

  1. linux下的清屏函数是system("clear")
  2. Windows下的清屏函数是system("cls")
  3. clrscr()是Turbo C中的库函数,包含在#include <conio.h> 中。
    在VC中无法调用此函数

下面贴出的代码中使用的是 sleep(1)system("clear")
至于为什么不是 sleep(1000)system("cls")
请仔细把上方的注意再看一遍~~~

②完整代码:

/*title: 学生信息管理系统(c/c++)
 *author: Griouges
 *转载请注明出处:http://www.cnblogs.com/Griouges/
 */
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define M 50
typedef struct
{                           //定义学生信息结构体
    char no[20];            //学号
    char name[20];        //姓名
    char sex[5];            //性别
    int age;                //年龄
} students;
void return_ment();                                 //返回主菜单
void print_ment();                                   //打印主菜单
int ment_select();                                   //主菜单选择
int enter(students t[]);                               //输入学生信息
void list(students t[], int n);                     //显示学生信息
void search_name(students t[], int n);              //按姓名查找显示学生信息
void search_no(students t[], int n);                   //按序号查找显示学生信息
void change_no(students t[], int n);                   //按学号修改学生信息
int del(students t[], int n);                         //删除学生信息
int add(students t[], int n);                         //插入学生信息
int load(students t[]);                             //从文件中读取学生信息
void print(students temp);                           //显示单条学生信息
void save(students t[], int n);                     //保存学生信息为文件
int find_name(students t[], int n, char *s);          //按姓名查找
int find_no(students t[], int n, char *s);         //按学号查找
/*
 *
 */
void return_ment()
{
    char mistake[20];
    printf("按回车键返回主菜单...\n");
    gets(mistake);
    return;
}
void print_ment()
{
    printf("********************主菜单********************\n");
    printf("               0. 录入学生信息\n");
    printf("               1. 浏览学生信息\n");
    printf("               2. 按姓名查找\n");
    printf("               3. 按学号查找\n");
    printf("               4. 按学号删除\n");
    printf("               5. 按学号修改\n");
    printf("               6. 插入一组学生信息\n");
    printf("               7. 保存学生信息到文件\n");
    printf("               8. 加载文件到内存\n");
    printf("               9. 退出\n");
    printf("********************************************\n");
    return;
}
int ment_select()
{
    print_ment();
    printf("\n输入您的菜单选项编号(0-11):");
    int c;
    while (1)
    {
        scanf("%d", &c);
        getchar();
        if (c > 11 || c < 0)
        {
            system("clear");
            print_ment();
            printf("\n输入的选项编号无效,请重新输入:");
            continue;
        }
        else
            break;
    }
    return c;
}
//输入学生信息,形参为结构体数组,函数值返回类型为整型表示信息长度
int enter(students t[])
{
    int i, n;
    system("clear");
    printf("\n请输入需要记录学生的条数\n");
    scanf("%d", &n);
    system("clear");
    printf("请输入%d位学生的信息:\n", n);
    printf("学号          姓名          性别          年龄\n");
    printf("--------------------------------------------\n");
    for (i = 0; i < n; i++)
    {
        scanf("%s", t[i].no);
        scanf("%s", t[i].name);
        scanf("%s", t[i].sex);
        scanf("%d", &t[i].age);
        getchar();
    }
    printf("信息录入中...\n");
    sleep(1);
    if (i == n)
        printf("信息录入成功!\n");
    else
        printf("信息录入失败!\n");
    return n;
}
//显示信息,形参为结构体数组和信息条数
void list(students t[], int n)
{
    int i;
    system("clear");
    if (n == 0)
    {
        printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
        return;
    }
    printf("\n*******************学生清单******************\n");
    printf("学号          姓名          性别          年龄\n");
    printf("---------------------------------------------\n");
    for (i = 0; i < n; i++)
    {
        printf("%-14s%-14s%-14s%-14d\n", t[i].no, t[i].name, t[i].sex, t[i].age);
        if ((i + 1) % 10 == 0 /*&&n%10>0*/)
        {
            printf("---------------------------------------------\n");
            printf("每页显示10位学生的信息,按回车向后翻页...\n");
            getchar();
            system("clear");
            printf("\n*******************学生清单*******************\n");
            printf("学号          姓名          性别          年龄\n");
            printf("---------------------------------------------\n");
        }
    }
    printf("---------------------------------------------\n");
}
void search_name(students t[], int n)
{
    char s[20];
    int i;
    system("clear");
    if (n == 0)
    {
        printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
        return;
    }
    printf("请输入查找的学生的名字:\n");
    scanf("%s", s);
    getchar();
    i = find_name(t, n, s);
    if (i > n - 1)
        printf("没有姓名为%s的学生!\n", s);
    else
        print(t[i]);
}
void search_no(students t[], int n)
{
    system("clear");
    if (n == 0)
    {
        printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
        return;
    }
    int no;
    printf("请输入查找信息学生的学号:\n");
    scanf("%d", &no);
    getchar();
    if (no >= 0 && no < n)
    {
        print(t[no]);
        printf("\r\n");
    }
    else
        printf("学号为%d的学生不存在!\n", no);
}
void change_no(students t[], int n)
{
    if (n == 0)
    {
        printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
        return;
    }
    system("clear");
    char no[20];
    int i;
    printf("请输入要修改的学生信息的学号:\n");
    scanf("%s", no);
    i = find_no(t, n, no);
    if (i == n)
        printf("没有找到学号为%s的学生!\n", no);
    else
    {
        printf("学号为%s的学生信息修改前为:\n", no);
        print(t[i]);
        printf("\n\n");
        printf("请输入修改后的信息:\n");
        printf("学号          姓名          性别          年龄\n");
        printf("---------------------------------------------\n");
        scanf("%s", t[i].no);
        scanf("%s", t[i].name);
        scanf("%s", t[i].sex);
        scanf("%d", &t[i].age);
        getchar();
    }
    system("clear");
    printf("正在修改学号为%s的学生信息...\n", no);
    sleep(1);
    system("clear");
    printf("*****修改成功*****\n");
    printf("修改后的信息为:\n");
    print(t[i]);
}
int del(students t[], int n)
{
    char s[20];
    int ch = 0;
    int i;
    system("clear");
    if (n == 0)
    {
        printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存\n");
        return n;
    }
    printf("请输入要删除的学生姓名:\n");
    scanf("%s", s);
    getchar();
    i = find_name(t, n, s);
    if (i == n)
        printf("没有找到名字为%s的学生!\n", s);
    else
    {
        printf("正在删除...\n");
        for (; i < n; i++)
        {
            strcpy(t[i].name, t[i + 1].name);
            strcpy(t[i].no, t[i + 1].no);
            strcpy(t[i].sex, t[i + 1].sex);
            t[i].age = t[i + 1].age;
        }
        n--;
        printf("删除成功!\n");
    }
    return n;
}
int add(students t[], int n)
{
    system("clear");
    if (n == 0)
    {
        printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
        return n;
    }
    students temp;
    int i, j;
    char s[20];
    printf("请输入要插入的学生信息:\n");
    printf("学号          姓名          性别          年龄\n");
    printf("--------------------------------------------\n");
    scanf("%s%s%s%d", temp.no, temp.name, temp.sex, &temp.age);
    getchar();
    printf("--------------------------------------------\n");
    if (n > 0)
    {
        printf("请输入插入位置的姓名,将新信息插入在该学生前面:\n");
        scanf("%s", s);
        getchar();
        i = find_name(t, n, s);
    }
    else
        i = 0;
    for (j = n - 1; j >= i; j--)
    {
        strcpy(t[i + 1].no, t[i].no);
        strcpy(t[i + 1].name, t[i].name);
        strcpy(t[i + 1].sex, t[i].sex);
        t[i + 1].age = t[i].age;
    }
    strcpy(t[i].no, temp.no);
    strcpy(t[i].name, temp.name);
    strcpy(t[i].sex, temp.sex);
    t[i].age = temp.age;
    n++;
    printf("信息插入成功!\n");
    return n;
}
void save(students t[], int n)
{
    system("clear");
    int i;
    FILE *fp;
    if ((fp = fopen("record.txt", "wb")) == NULL)
    {
        printf("无法打开学生信息文件!\n");
        exit(1);
    }
    printf("\n正在保存...\n");
    fprintf(fp, "%d", n);
    fprintf(fp, "\r\n");
    for (i = 0; i < n; i++)
    {
        fprintf(fp, "%-14s%-14s%-14s%-14d", t[i].no, t[i].name, t[i].sex, t[i].age);
        fprintf(fp, "\r\n");
    }
    fclose(fp);
    sleep(1);
    system("clear");
    printf("*****保存成功*****\n");
}
int load(students t[])
{
    int i, n;
    FILE *fp;
    if ((fp = fopen("record.txt", "rb")) = NULL)
    {
        printf("无法打开学生信息文件!\n");
        exit(1);
    }
    fscanf(fp, "%d", &n);
    for (i = 0; i < n; i++)
        fscanf(fp, "%14s%14s%14s%14d", t[i].no, t[i].name, t[i].sex, &t[i].age);
    fclose(fp);
    printf("成功加载学生信息到内存中!\n");
    return n;
}
//显示指定的一组数据
void print(students temp)
{
    printf("\n*******************学生清单*******************\n");
    printf("学号          姓名          性别          年龄\n");
    printf("---------------------------------------------\n");
    printf("%-14s%-14s%-14s%-14d", temp.no, temp.name, temp.sex, temp.age);
    // printf("---------------------------------------------\n");
}
int find_name(students t[], int n, char *s)
{
    int i;
    for (i = 0; i < n; i++)
        if (strcmp(s, t[i].name) == 0)
            return i;
    return i;
}
int find_no(students t[], int n, char *s)
{
    int i;
    for (i = 0; i < n; i++)
        if (strcmp(s, t[i].no) == 0)
            return i;
    return i;
}
//主函数
int main()
{
    students stu[M]; //定义结构体数组
    int length = 0; //保存信息条数
    for (;;)
    {
        system("clear");
        switch (ment_select())
        {
        case 0:
            length = enter(stu);
            break;
        case 1:
            list(stu, length);
            break;
        case 2:
            search_name(stu, length);
            break;
        case 3:
            search_no(stu, length);
            break;
        case 4:
            length = del(stu, length);
            break;
        case 5:
            change_no(stu, length);
            break;
        case 6:
            length = add(stu, length);
            break;
        case 7:
            save(stu, length);
            break;
        case 8:
            length = load(stu);
            break;
        case 9:
            exit(0);
            break;
        }
        return_ment();
    }
    return 0;
}
代码中有任何问题欢迎大家指正,以便及时修改哦!

学生信息管理系统(c语言)的更多相关文章

  1. C语言练习-学生信息管理系统

    题目要求: 学生信息管理系统struct studentInfo{ int id; char name[128]; int age; char sex; int c_score; int cpp_sc ...

  2. 【转载】C语言综合实验1—学生信息管理系统

    http://www.cnblogs.com/Anker/archive/2013/05/06/3063436.html 实验题目:学生信息管理系统 实验要求:用户可以选择1-7可以分别进行学生信息的 ...

  3. C语言小练习之学生信息管理系统

    C语言小练习之学生信息管理系统 main.c文件   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...

  4. 大一C语言结课设计之《学生信息管理系统》

    第一次写这么长的程序,代码仅供參考,有问题请留言. /* ** 学生信息管理系统 ** IDE:Dev-Cpp 4.9.9.2 ** 2014-6-15 */ #include <stdio.h ...

  5. 学生信息管理系统(C语言)

    #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct student ...

  6. 基于数组或链表的学生信息管理系统(小学期C语言程序实训)

    1.基于数组的学生信息管理系统 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理.定义学生信息的结构体类型,包括:学号.姓名.专业.班级.3门成绩. 实验要求: (1) main函数:以菜 ...

  7. 【Python3.6+Django2.0+Xadmin2.0系列教程之二】学生信息管理系统(入门篇)

    上一篇我们已经创建好了一个Xadmin的基础项目,现在我们将在此基础上构建一个同样很基础的学生信息管理系统. 一.创建模型 模型是表示我们的数据库表或集合类,并且其中所述类的每个属性是表或集合的字段, ...

  8. 基于Spring MVC + Spring + MyBatis的【学生信息管理系统】

    资源下载:https://download.csdn.net/download/weixin_44893902/45603211 练习点设计: 模糊查询.删除.新增 一.语言和环境 实现语言:JAVA ...

  9. 基于数据库MySQL的简易学生信息管理系统

    通过这几天学习Mysql数据库,对其也有了基本的了解,为了加深印象,于是就写了一个最简易的学生信息管理系统. 一:基本要求 1.通过已知用户名和密码进行登录: 2.可以显示菜单: 3.可以随时插入学生 ...

随机推荐

  1. CentOS之7与6的区别

    前言 centos7与6之间最大的差别就是初始化技术的不同,7采用的初始化技术是Systemd,并行的运行方式,除了这一点之外,服务启动.开机启动文件.网络命令方面等等,都说6有所不同.让我们先来了解 ...

  2. Win10微软帐户切换不回Administrator本地帐户的解决方法--(转,虽转但亲测有效)

    在Win10系统中经常会用到微软帐户登录,如应用商店等地方,不过一些用户反馈原来使用Administrator帐户被绑定微软帐户后无法切换回本地帐户,连[改用本地帐户登录]按钮都没有,那么怎么解决呢? ...

  3. hdu3507 Print Article

    Print Article Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) P ...

  4. 关键字voltale

    ***volatile在多线程用的最多.*** #include<stdio.h> #include<stdlib.h> int main() { ; i < ; i++ ...

  5. editplus 常用正则

    EditPlus的查找,替换,文件中查找支持以下的正则表达式: Expression Description\t Tab character.\n New line.. Matches any cha ...

  6. 创建分模块的maven项目

    折腾了我2天的maven,整理一下,以后做个参考 一.什么是maven项目: Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. Maven ...

  7. JAVA配置&注解方式搭建简单的SpringMVC前后台交互系统

    前面两篇文章介绍了 基于XML方式搭建SpringMVC前后台交互系统的方法,博文链接如下: http://www.cnblogs.com/hunterCecil/p/8252060.html htt ...

  8. echarts中视觉映射器(visualMap)与时间轴(timeline)混用的实现方法

    1.简述 echarts中的 timeline 组件,提供了在多个 ECharts option 间进行切换.播放等操作的功能. 与其他组件些不同,它需要操作『多个option』. 所以除了基准的ba ...

  9. ipython的用法详解

    ipython是一个升级版的交互式python命令行工具. ipython安装 pip install ipython 等到命令执行完成后显示successfully表示完装成功 在命令提示符下输入i ...

  10. Linux中fdisk硬盘分区方法

    fdsik 能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统,比如linux .fat32. linux .linux swap .fat16 以及其实类Unix类操作系统的文件系统等:当 ...